package com.lianqi.emcpframework.design.domain;

/**
 * @program emcp-framework
 * @ClassName SortableEntity
 * @description: 可排序实体
 * @author: sky
 * @create: 2019/06/04 11:19
 */
public interface SortableEntity extends Comparable<SortableEntity> {
    /**
     * 设置排序值
     * 
     * @param value
     */
    void setSortValue(Long value);

    /**
     * 获取排序值
     * 
     * @return
     */
    Long getSortValue();

    /**
     * 排序值比较方法
     * 
     * @param entity
     *            排序对象
     * @return
     */
    @Override
    default int compareTo(SortableEntity entity) {
        if (entity == null) {
            return -1;
        }
        Long currSort = this.getSortValue() == null ? 0 : this.getSortValue();
        Long otherSort = entity.getSortValue() == null ? 0 : entity.getSortValue();
        return Long.compare(currSort, otherSort);
    }
}
